package com.kx.talk.service;

import com.kx.talk.pojo.Message;
import com.kx.talk.vo.UnReadCountVO;

import java.util.List;

/**
 * @Author Sun
 * @Date 2021/8/2 21:49
 */
public interface TalkService {

    /**
     * 给好友发送消息的方法
     * @param sendUserId 发送人id
     * @param receiveUserId 接收人id
     * @param message 发送的内容
     * @param messageTypeId 内容的类型
     * @return 数据库的请求结果
     *         0 发送失败
     *         1 发送成功
     *        -1 对方和您不是朋友关系
     */
    int sendMessage(Long sendUserId, Long receiveUserId, String message, Long messageTypeId);

    /**
     * 设置消息的读取状态
     * @param sendUserId 发送人id
     * @param receiveUserId 接收人id
     * @param messageId 消息id
     * @param readState 消息是否读取 0 未读   1 已读
     * @return 数据库的执行结果
     */
    Integer modifyMessageReadState(Long sendUserId,
                                   Long receiveUserId,
                                   Long messageId,
                                   Integer readState);

    /**
     * 查询一页单人聊天记录数据
     * @param selfUserId 用户自己的id
     * @param otherUserId 单人聊天中对方的id
     * @param selfSendLastItemId 自己发送的消息中最后一个item的id
     *                           当此值为null时，SQL中使用自己发送数据
     *                           的表查询第一页数据
     * @param otherSendLastItemId 对方发送的消息中最后一个item的id
     *                            当此值为null时，SQL中使用对方发送数据
     *                            的表查询第一页数据
     * @param pageSize 页的大小
     * @return 这一页数据
     */
    List<Message> selectPageChartRecord(Long selfUserId,
                                        Long otherUserId,
                                        Long selfSendLastItemId,
                                        Long otherSendLastItemId,
                                        Integer pageSize);

    /**
     * 查询指定用户的所有未读消息总数的接口
     * @param userId 用户id
     * @return 未读消息的总数
     */
    long selectUnreadCountByUserId(Long userId);

    /**
     * 分组查询用户未读消息总数的接口
     * 按照好友的id进行分组
     * @param userId 用户id
     * @return 分组查询未读消息的总数
     */
    List<UnReadCountVO> selectUnReadCountGroupBy(Long userId);
}

